// 1.
// 1获取用户的收获地址
// 2绑定点击事件
// 2调用小程序内置 api 获取用户的收获地址 wx.chooseAddress
// 2获取用户 对小程序 所授予 获取地址的 权限 状态 scope
// 1.假设 用户 点击获取收货地址的提示框 确定 authSetting scope.address
// scope 值 true 
// 2假设用户 点击收货地址的提示框 取消 
// scope 值 false
// 1.诱导用户 自己打开授权设置页面(wx.openSetting) 当用户重新给与 获取地址权限的时候
// 2.获取收货地址
// 3假设 用户 从来没有调用过 收获地址的api
// scope undefined
// 4把获取到的收货地址 存入本地存储当中
// 2.页面加载完毕
// 0 onLoad onShow
// 1获取本地存储中的地址数据
// 2.把数据设置给data中的一个变量
// 3 onshow
// 1获取缓存中的购物车数组
// 2把购物车数据 填充到data中
// 4.全选的实现 数据的展示
// 1 onShow 获取缓存中的购物车数组
// 2根据购物车中的商品数据 所有的商品都被选中 checked=true 全选就被选中
// 5总价格和总数量
// 1都需要商品被选中 我们才能拿他来计算
// 2获取购物车数组
// 3遍历
// 4判断商品是否被选中
// 5总价格+=商品的单价*商品的数量
// 5总价格+=商品的单价
// 6把计算后的价格和数量 设置回data中即可
// 6商品的选中
// 1绑定change事件
// 2获取到被修改的商品对象
// 3商品对象的选中状态 取反
// 4重新填充回data中和缓存中
// 5重新计算全选 总价格 总数量
// 7全选和反选
// 1全选复选框绑定事件 change
// 2获取data中的全选变量 allChecked
// 3直接取反 allChecked=!allChecked
// 4遍历购物车数组 让里面商品选中状态跟随 allChecked改变而改变
// 5把购物车数组 和 allChecked 重新设置回data 把购物车重新设置回缓存中

// 8商品数量的编辑
// 1"+" "-"按钮 绑定同一个点击事件 区分关键 自定义属性
// 1"+" "+1"
// 2"-" "-1"
// 2传递被点击的商品id goods_id
// 3.获取data中的购物车数组 来获取需要被修改的商品对象
// 4当 购物车的数量 =1同时用户点击"-"
     // 弹窗提示 选文用户 是否要删除
    //  1确定直接执行删除
    //  2取消 什么都不做

// 4直接修改商品对象的数量 num
// 5把cart数组 重新设置回 缓存中 和data中 this.setCart

// 9点击结算
// 1判断有没有收货地址信息
// 2判断用户有没有选购商品
// 3经过以上的验证跳转到支付页面!
import {getSetting,chooseAddress,openSetting,showModal,showToast} from "../../utils/asyncWX.js"
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({
// 点击 收货地址


// wx.getSetting({
//     success: (result) => {
//         // 2获取 权限状态 主要发现一些 属性名很怪异的时候 都要使用[] 形式来获取属性值
//         const scopeAddress = result.authSetting["scope.address"]
//         if(scopeAddress===true||scopeAddress===undefined){
//             wx.chooseAddress({
//                 success: (result1) => {
//                     console.log(result1);
//                 },
//          });
//         }else{
//             // 3用户 以前拒绝过授予权限 先诱导用户打开授权页面
//             wx.openSetting({
//                 success: (result2) => {
//                     // 4可以调用收获地址代码
//                     wx.chooseAddress({
//                         success: (result3) => {
//                             console.log(result3);
//                         },
//                  });
//                 },
//             });
              
//         }
//     },
//     fail: () => {},
//     complete: () => {}
// });
data:{
address:{},
cart:[],
allChecked:false,
totalPrice:0,
totalNum:0
},
onShow(){
// 获取缓存中的收货地址信息
const address=wx.getStorageSync("address");
// 1获取缓存中的购物车数据
const cart = wx.getStorageSync("cart")||[];

this.setData({address});
this.setCart(cart);
  
},

    // 点击获取地址
async handleChooseAddress(){
    try {
    //   1.获取 权限状态
    const res1 = await getSetting();
    const scopeAddress = res1.authSetting["scope.address"];
    // 2判断权限状态
    if(scopeAddress===false){
        await openSetting();
    
        
    }
    // 4.调用获取收货地址的 api
    let address = await chooseAddress();
    address.all=address.provinceName+address.cityName+address.countyName+address.detailInfo;
    // 5存入到缓存中
   wx.setStorageSync("address", address);
     
    
} catch (error) {
    console.log(error);
}
},
// 商品的选中
handeItemChange(e){
// 1.获取被修改的商品的id
const goods_id=e.currentTarget.dataset.id;
// 2获取购物车数组
let {cart}=this.data;
// 3找到被修改的商品对象
let index = cart.findIndex(v=>v.goods_id===goods_id);
// 4选中状态取反
cart[index].checked=!cart[index].checked;

this.setCart(cart);

},
// 设置购物车状态同时 重新计算 底部工具栏的数据 全选 总价格 购买的数量
setCart(cart){
   
   
    let allChecked= true;
    //   1总价格总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
        if(v.checked){
            totalPrice+=v.num*v.goods_price;
            totalNum+=v.num;
        }else{
            allChecked=false;
        }
    })
    // 判断数组是否为空
    allChecked=cart.length!=0?allChecked:false;
    this.setData({
        cart,
        totalPrice,totalNum,allChecked
    });
    wx.setStorageSync("cart", cart);
},
// 商品全选功能
handleItemAllCheck(){
    // 1.获取data中的数据
    let {cart,allChecked}=this.data;
    // 2修改值
    allChecked=!allChecked;
    // 3循环修改cart数组 中的商品选中状态
    cart.forEach(v=>v.checked=allChecked);
    // 4把修改后的值 填充回data或者缓存中
    this.setCart(cart);
},
// 商品数量的编辑功能
async handleItemNumEdit(e){


// 1获取传递过来的参数
const {operation,id}=e.currentTarget.dataset;
// 2.获取购物车数组
let {cart}=this.data;
// 3找到需要修改的商品的索引
const index=cart.findIndex(v=>v.goods_id===id);
//  4半段是否要执行删除
if(cart[index].num===1 && operation===-1){
    //4.1 弹窗提示

     
      const res =await showModal({content:"您是否要删除?"});
      if (res.confirm) {
        cart.splice(index,1);
        this.setCart(cart);
       } 
}else{
// 4进行修改数量
cart[index].num+=operation;
// 5设置回缓存和data中
this.setCart(cart);
}

},
// 点击结算

async handlePay(){
    // 1.判断收货地址
    const {address,totalNum} = this.data;
    if(!address.userName){
        await showToast({title:"您还没有选择收货地址"});
return;
    }
    // 2判断用户有没有选购商品
    if(totalNum===0){
        await showToast({title:"您还没有选购商品"});
        return;
    }
    // 3跳转到 支付页面
    wx.navigateTo({
        url: '/pages/pay/index'
    
    });
      
}
})